<?php
require_once("libs/controller.php");
require_once("modelos/personas.php");
require_once("modelos/alcances.php");
require_once("modelos/clasificaciones.php");
require_once("modelos/tematicas.php");
require_once("modelos/tipos.php");
require_once("modelos/entidades.php");
require_once("modelos/estatus.php");
require_once("modelos/correlativos.php");
require_once("modelos/actividades.php");
require_once("modelos/usuarios.php");
require_once("modelos/actividadesusuarios.php");
require_once("modelos/actuaciones.php");
require_once("modelos/actuacionesusuarios.php");
require_once("libs/funciones.php");

class ActividadesController extends Controller 
{
	public function __construct() 
	{
		$this->layout = "aplicacion";
		$this->pageTitle = "Escuela Nacional de Fiscales";	
	}
	
	public function index() 
	{
		try 
		{
			$this->layout = "aplicacion";
			$_SESSION["pestania"] = 1;
			$this->nivelesPermitidos = array(2); //supervisor
			extract($_REQUEST);
			if(isset($ap))
				$this->ap=$ap;
			else
				$this->ap=1;
			
			$this->actividades_usuarios=new Actividadesusuarios();
			//si el usuario es supervisor (nivel 2) puede ver todas las actividades creadas
			if(!(strcmp(LocalUser::getCurrentUser()->getNivel(),"2")==0))
			{
				//aplicando filtro de actividades al usuario logeado
				$this->actividades_usuarios->addCondition("id_usuario",LocalUser::getCurrentUser()->getId());
			}
			else
			{
				//aplicando filtro de actividades al planificador 1
				$this->actividades_usuarios->addCondition("tipo_planificador","1");
			}
			$this->actividades_usuarios->addOrderBy("id", DB_ASC);
			$this->actividades_usuarios->doSelectAll();
			
			$this->logger->info(LocalUser::getCurrentUser()->getId()." - ".LocalUser::getCurrentUser()->getAlias()." actividades->index ");
		} 
		catch (Exception $e) 
		{
			$this->logger->error(LocalUser::getCurrentUser()->getId()." - ".LocalUser::getCurrentUser()->getAlias()." Error en actividades->index: ".$e->getMessage());
			$mensaje="Ha ocurrido un error al consultar la informaci&oacute;n. Por favor intente m&aacute;s tarde.";
			$this->continuar=false;
			$this->showNotificacion("",$mensaje,"Regresar","actividades/","aplicacion","");
		}
	}
	
	public function crear()
	{
		try 
		{
			$this->layout = "aplicacion";
			$_SESSION["pestania"] = 1;
			$this->nivelesPermitidos = array(2); //supervisor
			$this->persona=new Personas();
			$this->persona->doSelectOne(LocalUser::getCurrentUser()->getIdPersona());
			$this->persona->next();
			$this->clasificaciones=new Clasificaciones();
			$this->clasificaciones->doSelectAll();
			$this->tematicas=new Tematicas();
			$this->tematicas->doSelectAll();
			$this->alcances=new Alcances();
			$this->alcances->doSelectAll();
			$this->tipos=new Tipos();
			$this->tipos->doSelectAll();
			$this->planificadores=new Usuarios();
			$this->planificadores->addCondition("id_nivel_usuario","3");
			$this->planificadores->addCondition("estatus","1");
			$this->planificadores->addOrderBy("nombres",DB_ASC);
			$this->planificadores->doSelectAllWithForeign("personas","id_persona");
			$this->entidades=new Entidades();
			$this->entidades->doSelectAll();
			$this->estatus=new Estatus();
			$this->estatus->doSelectAll();
			$id_persona = LocalUser::getCurrentUser()->getIdPersona();
			$this->logger->info(LocalUser::getCurrentUser()->getId()." - ".LocalUser::getCurrentUser()->getAlias()." actividades->crear");
		} 
		catch (Exception $e) 
		{
			$this->logger->error(LocalUser::getCurrentUser()->getId()." - ".LocalUser::getCurrentUser()->getAlias()."Error en actividades->crear: ".$e->getMessage());
			$mensaje="Ha ocurrido un error al consultar su informaci&oacute;n. Por favor intente m&aacute;s tarde.";
			$this->continuar=false;
			$this->showNotificacion("",$mensaje,"Regresar","actividades/","aplicacion","");
		}
	}
	
	public function guardar() 
	{
		try 
		{
			extract($_REQUEST);
			$this->nivelesPermitidos = array(2); //supervisor
			//creacion de objetos modelos
			$correlativo=new Correlativos();
			$actividad=new Actividades();
			$actividades_usuarios=new Actividadesusuarios();
			
			//begin
			$actividad->getConnection()->iniciarTransaccion();
			
			//anio actual
			$anio=date("Y");
			$anio=substr($anio,2);
			
			// procesamiento campos especiales
			$tipoActividadSel=explode(";",$tipoActividad);
			
			/*INICIO PROCESAMIENTO CORRELATIVOS*/
			//buscando ultimo correlativo
			$correlativo->addCondition("tipo","actividad",DB_EQUAL);
			$correlativo->addCondition("anio",$anio,DB_EQUAL);
			$correlativo->doSelectAll();
			if($correlativo->next())
			{
				// ultimo correlativo
				$ultCorr=$correlativo->getValue("ultimo");
				//nuevo correlativo
				$ultCorr=$ultCorr+1;
				//actualizo correlativo
				$correlativo->setValue("tipo","actividad");
				$correlativo->setValue("anio",$anio);
				$correlativo->setValue("ultimo",$ultCorr);
				$correlativo->doUpdate();
				//limpio objeto correlativo
				$correlativo->clear();
			}
			else
			{
				//limpio objeto correlativo
				$correlativo->clear();
				//inserto nuevo correlativo
				$correlativo->setValue("tipo","actividad");
				$correlativo->setValue("anio",$anio);
				$correlativo->setValue("ultimo","1");
				$correlativo->doSave();
				$ultCorr=1;
			}
			/*FIN PROCESO CORRELATIVO*/
			
			//formateo de codigo de actividad
			$codigoActividad=str_pad($ultCorr,3,"0",STR_PAD_LEFT);
			
			//inicio seteo datos de actividad
			$actividad->setValue("codigo",$codigoActividad);
			$actividad->setValue("nombre",trim($nombreActividad));
			$actividad->setValue("anio",$anio);
			$actividad->setValue("id_clasificacion",$clasificacion);
			$actividad->setValue("id_tematica",$tematica);
			$actividad->setValue("id_alcance",$alcance);
			$actividad->setValue("id_tipo_actividad",$tipoActividadSel[0]);
			if(!(strcmp($convenio,"")==0))
			{
				$actividad->setValue("convenio",$convenio);
			}
			if(!(strcmp($institucion,"")==0))
			{
				$actividad->setValue("institucion",trim($institucion));
			}
			$actividad->setValue("certificacion",$certificacion);
			//fin seteo datos de actividad
			
			//guardar actividad
			$actividad->doSave();
				
			//obtengo ID de la actividad ingresada
			$id_actividad=$actividad->getId();
			//inicio asociacion planificadores con actividad
			$actividades_usuarios->setValue("id_actividad",$id_actividad);
			$actividades_usuarios->setValue("id_usuario",$planificador1);
			$actividades_usuarios->setValue("tipo_planificador","1");
			$actividades_usuarios->doSave();
			$actividades_usuarios->clear();
			if(!(strcmp($planificador2,"")==0))
			{
				$actividades_usuarios->setValue("id_actividad",$id_actividad);
				$actividades_usuarios->setValue("id_usuario",$planificador2);
				$actividades_usuarios->setValue("tipo_planificador","2");
				$actividades_usuarios->doSave();
				$actividades_usuarios->clear();
			}
			if(!(strcmp($planificador3,"")==0))
			{
				$actividades_usuarios->setValue("id_actividad",$id_actividad);
				$actividades_usuarios->setValue("id_usuario",$planificador3);
				$actividades_usuarios->setValue("tipo_planificador","3");
				$actividades_usuarios->doSave();
				$actividades_usuarios->clear();
			}
			//fin asociacion planificadores con actividad
			
			//commit
			$actividad->getConnection()->confirmarTransaccion();
			
			$this->logger->info(LocalUser::getCurrentUser()->getId() ." - " . LocalUser::getCurrentUser()->getAlias()." actividad->crear codigo_actividad=" .$codigoActividad);
			$this->redirect("actividades/");
		}
		catch (Exception $e) 
		{
			//rollback
			$actividad->getConnection()->revertirTransaccion();
			$this->logger->error( LocalUser::getCurrentUser()->getId() ." - " . LocalUser::getCurrentUser()->getAlias()." Error en actividad->crear : ".$e->getMessage());
			$mensaje="Ha ocurrido un error al procesar su informaci&oacute;n. Por favor intente m&aacute;s tarde.";
			$this->continuar=false;
			$this->showNotificacion("",$mensaje,"Regresar","actividades/","aplicacion","");
		}	
	}
	
	public function editar() 
	{
		try 
		{
			$this->layout = "aplicacion";
			$_SESSION["pestania"] = 1;
			$this->nivelesPermitidos = array(2); //supervisor
			extract($_REQUEST);
			if(isset($ap))
				$this->ap=$ap;
			else
				$this->ap=1;
			$this->idActividad=$idActividad;
			
			//creacion objetos modelos
			$this->actividad=new Actividades();
			$actividades_usuarios=new Actividadesusuarios();
			
			//obteniendo actividad a editar
			$this->actividad->addCondition("id",$idActividad);
			$this->actividad->doSelectAll();
			$this->actividad->next();
			
			//consultas tablas clasificaciones, tematicas, alcances, tipos, entidades, estatus, planificadores
			$this->clasificaciones=new Clasificaciones();
			$this->clasificaciones->doSelectAll();
			$this->tematicas=new Tematicas();
			$this->tematicas->doSelectAll();
			$this->alcances=new Alcances();
			$this->alcances->doSelectAll();
			$this->tipos=new Tipos();
			$this->tipos->doSelectAll();
			$this->entidades=new Entidades();
			$this->entidades->doSelectAll();
			$this->estatus=new Estatus();
			$this->estatus->doSelectAll();
			$this->planificadores=new Usuarios();
			$this->planificadores->addCondition("id_nivel_usuario","3");
			$this->planificadores->addCondition("estatus","1");
			$this->planificadores->addOrderBy("nombres",DB_ASC);
			$this->planificadores->doSelectAllWithForeign("personas","id_persona");
			
			/*planificador 1*/
			$actividades_usuarios->addCondition("id_actividad",$idActividad);
			$actividades_usuarios->addCondition("tipo_planificador","1");
			$actividades_usuarios->doSelectAll();
			if($actividades_usuarios->next())
			{
				$this->planificador1=$actividades_usuarios->getValue("id_usuario");;
			}
			else
			{
				$this->planificador1="";
			}
			/*fin planificador 1*/
			
			$actividades_usuarios->clear();
			/*planificador 2*/
			$actividades_usuarios->addCondition("id_actividad",$idActividad);
			$actividades_usuarios->addCondition("tipo_planificador","2");
			$actividades_usuarios->doSelectAll();
			if($actividades_usuarios->next())
			{
				$this->planificador2=$actividades_usuarios->getValue("id_usuario");;
			}
			else
			{
				$this->planificador2="";
			}
			/*fin planificador 2*/
			
			$actividades_usuarios->clear();
			/*planificador 3*/
			$actividades_usuarios->addCondition("id_actividad",$idActividad);
			$actividades_usuarios->addCondition("tipo_planificador","3");
			$actividades_usuarios->doSelectAll();
			if($actividades_usuarios->next())
			{
				$this->planificador3=$actividades_usuarios->getValue("id_usuario");;
			}
			else
			{
				$this->planificador3="";
			}
			/*fin planificador 3*/
			
			$this->logger->info(LocalUser::getCurrentUser()->getId()." - ".LocalUser::getCurrentUser()->getAlias()." actividades->editar");
		} 
		catch (Exception $e) 
		{
			$this->logger->error(LocalUser::getCurrentUser()->getId()." - ".LocalUser::getCurrentUser()->getIdPersona()." Error en actividades->editar: ".$e->getMessage());
			$mensaje="Ha ocurrido un error al consultar su informaci&oacute;n. Por favor intente m&aacute;s tarde.";
			$this->continuar=false;
			$this->showNotificacion("",$mensaje,"Regresar","actividades/","aplicacion","");
		}
	}

	public function guardarEditar() 
	{
		try 
		{
			extract($_REQUEST);
			$this->nivelesPermitidos = array(2); //supervisor
			
			//creacion de objetos modelos
			$actividad=new Actividades();
			$actividades_usuarios=new Actividadesusuarios();
			
			//begin
			$actividad->getConnection()->iniciarTransaccion();
			
			//anio actual
			$anio=date("Y");
			$anio=substr($anio,2);
			
			// procesando campos especiales
			$tipoActividadSel=explode(";",$tipoActividad);
			
			//obteniendo actividad a editar
			$actividad->addCondition("id",$idActividad);
			$actividad->doSelectAll();
			$actividad->next();
			
			//inicio seteo datos de actividad
			$actividad->setValue("nombre",trim($nombreActividad));
			$actividad->setValue("id_clasificacion",$clasificacion);
			$actividad->setValue("id_tematica",$tematica);
			$actividad->setValue("id_alcance",$alcance);
			$actividad->setValue("id_tipo_actividad",$tipoActividadSel[0]);
			if(!(strcmp($convenio,"")==0))
			{
				$actividad->setValue("convenio",$convenio);
			}
			else
			{
				$actividad->setValue("convenio"," ");
			}
			if(!(strcmp($institucion,"")==0))
			{
				$actividad->setValue("institucion",trim($institucion));
			}
			else
			{
				$actividad->setValue("institucion"," ");
			}
			$actividad->setValue("certificacion",$certificacion);
			$actividad->setValue("fecha_actualizacion",date("d")."-".date("m")."-".date("Y"));
			//fin seteo datos de actividad
			
			//actualizando actividad
			$actividad->doUpdate();
				
			/*inicio asociacion planificadores con actividad*/
			//planificador1
			$actividades_usuarios->addCondition("id_actividad",$idActividad);
			$actividades_usuarios->addCondition("tipo_planificador","1");
			$actividades_usuarios->doSelectAll();
			$actividades_usuarios->next();
			$actividades_usuarios->setValue("id_actividad",$idActividad);
			$actividades_usuarios->setValue("id_usuario",$planificador1);
			$actividades_usuarios->setValue("tipo_planificador","1");
			$actividades_usuarios->doUpdate();
			$actividades_usuarios->clear();
			
			//inicio planificador2
			$actividades_usuarios->addCondition("id_actividad",$idActividad);
			$actividades_usuarios->addCondition("tipo_planificador","2");
			$actividades_usuarios->doSelectAll();
			if($actividades_usuarios->next())
			{
				if((strcmp($planificador2,"")==0))
				{
					//eliminar planificador2
					$idEliminar=$actividades_usuarios->getValue("id");
					$actividades_usuarios->clear();
					$actividades_usuarios->doDeleteAll("id",$idEliminar,DB_EQUAL);
				}
				else
				{
					//actualizar planificador2
					$actividades_usuarios->setValue("id_actividad",$idActividad);
					$actividades_usuarios->setValue("id_usuario",$planificador2);
					$actividades_usuarios->setValue("tipo_planificador","2");
					$actividades_usuarios->doUpdate();
					$actividades_usuarios->clear();
				}
				
			}
			else
			{
				//agregar planificador2
				if(!(strcmp($planificador2,"")==0))
				{
					$actividades_usuarios->setValue("id_actividad",$idActividad);
					$actividades_usuarios->setValue("id_usuario",$planificador2);
					$actividades_usuarios->setValue("tipo_planificador","2");
					$actividades_usuarios->doSave();
					$actividades_usuarios->clear();
				}
			}
			//fin planificador2
			
			//inicio planificador3
			$actividades_usuarios->addCondition("id_actividad",$idActividad);
			$actividades_usuarios->addCondition("tipo_planificador","3");
			$actividades_usuarios->doSelectAll();
			if($actividades_usuarios->next())
			{
				if((strcmp($planificador3,"")==0))
				{
					//eliminar planificador3
					$idEliminar=$actividades_usuarios->getValue("id");
					$actividades_usuarios->clear();
					$actividades_usuarios->doDeleteAll("id",$idEliminar,DB_EQUAL);
				}
				else
				{
					//actualizar planificador3
					$actividades_usuarios->setValue("id_actividad",$idActividad);
					$actividades_usuarios->setValue("id_usuario",$planificador3);
					$actividades_usuarios->setValue("tipo_planificador","3");
					$actividades_usuarios->doUpdate();
					$actividades_usuarios->clear();
				}
				
			}
			else
			{
				//agregar planificador3
				if(!(strcmp($planificador3,"")==0))
				{
					$actividades_usuarios->setValue("id_actividad",$idActividad);
					$actividades_usuarios->setValue("id_usuario",$planificador3);
					$actividades_usuarios->setValue("tipo_planificador","3");
					$actividades_usuarios->doSave();
					$actividades_usuarios->clear();
				}
			}
			//fin planificador3
			
			/*fin asociacion planificadores con actividad*/
			
			//commit
			$actividad->getConnection()->confirmarTransaccion();
			
			$this->logger->info(LocalUser::getCurrentUser()->getId() ." - " . LocalUser::getCurrentUser()->getAlias()." actividad->guardarEditar" );
			$this->redirect("actividades/index");
		}
		catch (Exception $e) 
		{
			//rollback
			$actividad->getConnection()->revertirTransaccion();
			$this->logger->error( LocalUser::getCurrentUser()->getId() ." - " . LocalUser::getCurrentUser()->getAlias()." Error en actividad->guardarEditar: ".$e->getMessage());
			$mensaje="Ha ocurrido un error al guardar su informaci&oacute;n. Por favor intente m&aacute;s tarde.";
			$this->continuar=false;
			$this->showNotificacion("",$mensaje,"Regresar","actividades/","aplicacion","");
		}	
	}
	
	public function xEliminar() 
	{
		try 
		{
			$this->nivelesPermitidos = array(2); //supervisor
			extract($_REQUEST);
			
			//creacion de objetos modelos
			$actividad=new Actividades();
			$actuaciones=new Actuaciones();
			$actividades_usuarios=new Actividadesusuarios();
			$actuaciones_usuarios=new Actuacionesusuarios();
			
			//begin
			$actividades_usuarios->getConnection()->iniciarTransaccion();
			
			//eliminacion de tabla actividadesusuarios
			$actividades_usuarios->doDeleteAll("id_actividad",$id_actividad,DB_EQUAL);
			
			$actuaciones->addCondition("id_actividad",$id_actividad);
			$actuaciones->doSelectAll();
			$is_actuacion="0";
			while($actuaciones->next())
			{
				$is_actuacion="1";	
				$id_actuacion=$actuaciones->getValue("id");
				$actuaciones_usuarios->addCondition("id_actuacion",$id_actuacion);
				$actuaciones_usuarios->doSelectAll();
				if($actuaciones_usuarios->next())
				{
					$actuaciones_usuarios->clear();
					//eliminacion de tabla actuacionesusuarios
					$actuaciones_usuarios->doDeleteAll("id_actuacion",$id_actuacion,DB_EQUAL);
				}
			}
			
			if((strcmp($is_actuacion,"1")==0))
			{
				$actuaciones->clear();
				//eliminacion de tabla actuaciones
				$actuaciones->doDeleteAll("id_actividad",$id_actividad,DB_EQUAL);
			}
			
			//eliminacion de tabla actividad
			$actividad->doDeleteAll("id",$id_actividad,DB_EQUAL);
			
			//commit
			$actividades_usuarios->getConnection()->confirmarTransaccion();
			
			//$this->logger->info(LocalUser::getCurrentUser()->getId()." ".LocalUser::getCurrentUser()->getAlias()." actividad->xEliminar: ".$id_actividad);
			echo '1';
		} 
		catch (Exception $e) 
		{
			//rollback
			$actividades_usuarios->getConnection()->revertirTransaccion();
			//$this->logger->error(LocalUser::getCurrentUser()->getId()." ".LocalUser::getCurrentUser()->getAlias()." Error en actividades->xEliminar: ".$e->getMessage());
			echo '0';
		}
	}
	
	public function xValidarNombre()
	{
		try 
		{
			extract($_REQUEST);
			//anio actual
			$anio=date("Y");
			$anio=substr($anio,2);
			
			$actividad = new Actividades();
			$actividad->addCondition("nombre", trim($nombre));
			$actividad->addCondition("anio", $anio);
			$actividad->doSelectAll();
			if($actividad->next())
			{
				if((strcmp($caso,"edicion")==0))
				{
					if((strcmp($actividad->getValue("id"),$idActividad)==0))
					{
						echo "1";
					}
					else
					{
						echo "0";
					}
				}
				else
				{
					echo "0";
				}
			}
			else
			{
				echo "1";
			}
		}
		catch (Exception $e) 
		{
			$this->logger->error("Error al consultar disponibilidad de alias: ".$e->getMessage());
		}
	}
	
	public function userNotAllowed() 
	{
		if (LocalUser::getCurrentUser()->getNivel() == -1)
			$this->showNotificacion("","Estimado usuario debe iniciar sesi&oacute;n.","Aceptar","usuario/index","principal","Escuela Nacional de Fiscales.-Login");
		else
			$this->showNotificacion("","Usuario no permitido","Aceptar","actuaciones/registrar","aplicacion","");
	}

	public function sessionExpired() 
	{
		$this->logger->info(LocalUser::getCurrentUser()->getId() ." " . LocalUser::getCurrentUser()->getAlias()." Sesion expirada");
		$this->showNotificacion("","Su sesi&oacute;n ha expirado.","Aceptar","usuario/index","aplicacion","");
	}
}
?>